package com.example;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

    private static final String REGEX = "aab";
    private static final String INPUT = "aab aab aab";

    public static void main(String[] args) {
        RegexTest regexTest = new RegexTest();
        regexTest.regexBase();
        regexTest.replaceAll();
    }

    public final void regexBase() {
        String regex = "aab";
        String regex2 = "aab aab aab";
        String regex3 = "a*b";
        String str = "aab aab aab";
        boolean isMatch = str.matches(regex); //false
        boolean isMatch2 = str.matches(regex2); //true
        boolean isMatch3 = str.matches(regex3); //false

        System.out.println("是否匹配：" + isMatch);
        System.out.println("是否匹配：" + isMatch2);
        System.out.println("是否匹配：" + isMatch3);


        
        int count = 0;
        Pattern p = Pattern.compile(REGEX);
        Matcher m = p.matcher(INPUT); // 获取 matcher 对象

        // 获取 matcher 对象
        // 使用 find() 方法查找字符串中所有匹配的子字符串
        // 是Java正则表达式匹配中的一个重要方法，用于在输入字符串中查找匹配正则表达式的下一个子序列。
        // 主要特点：
        //  1:返回布尔值，表示是否找到匹配 每次调用都会从上次匹配结束的位置继续查找
        //  2:可以通过循环找到所有匹配项
        while (m.find()) {
            // System.out.println("m.find()=>" + m.find());
            count++;
            System.out.println("Match number " + "\t" + count);
            System.out.println("start(): " + "\t" + m.start());
            System.out.println("end(): " + "\t" + m.end());
        }

        // 先编译成正则表达式
        // 获取 matcher 对象
        // matcher 有两个方法
        // 1. matches() 判断是否匹配 ：要求整个序列都匹配 是整个序列都匹配 (强匹配)
        // 2. lookingAt() 判断是否匹配 ：要求序列的开始部分匹配 是序列的开始部分匹配，虽然不需要整句都匹配，但是需要从第一个字符开始匹配
        // 判断是否匹配
        System.out.println("是否匹配=>matches" + "\t" + m.matches());// false
        System.out.println("是否匹配=>lookingAt" + "\t" + m.lookingAt());// true
    }

    // replaceAll 方法
    public final void replaceAll() {
        String regex = "aab";
        String input = "aab aab aab";
        String replacement = "AAB";
        String result = input.replaceAll(regex, replacement);
        System.out.println("替换后的结果=>" + result);

        // 正则的替换
        String regex2 = "cat";
        Pattern p = Pattern.compile(regex2);
        Matcher m = p.matcher("one cat two cats in the yard");
        String result2 = m.replaceAll("dog");
        System.out.println("替换后的结果=>" + result2);
       
    }
}
